Перейти к основному содержимому Перейти к дополнительному содержимому

For each..next

Оператор управления for each..next является компонентом итерации скрипта, который выполняет один или несколько операторов для каждого значения в списке, разделенном запятой. Операторы внутри цикла, заключенного с помощью for и next, выполняются для каждого значения списка.

Синтаксис:  

С помощью специального синтаксиса можно создавать списки с именами файлов и каталогов в текущем каталоге.

for each var in list

[statements]

[exit for [ ( when | unless ) condition ]

[statements]

next [var]

Аргументы:  

Аргументы
АргументОписание
varИмя переменной скрипта, которое получает новое значение из списка для каждого выполнения цикла. Если переменная var задана после next, она должна иметь такое же имя переменной, как указано после соответствующего предложения for each.

Значение переменной var может быть изменено операторами внутри цикла, однако это делать не рекомендуется.

Если в цикле появляется предложение exit for, выполнение скрипта будет передано первому оператору после предложения next, указывающего на конец цикла. Предложение exit for можно сделать условным с помощью дополнительного использования суффикса when или unless.

Примечание к информацииПоскольку оператор for each..next является оператором управления и заканчивается точкой с запятой или знаком конца строки, каждое из трех его возможных предложений (for each, exit for и next) не должно выходить за границу строки.

Синтаксис:  

list := item { , item }

item := constant | (expression) | filelist mask | dirlist mask | fieldvaluelist mask

 

Аргументы
АргументОписание
constantЛюбое число или строка. Обратите внимание на то, что строка, непосредственно записываемая в скрипте, должна быть заключена в одинарные кавычки. Строка без одинарных кавычек будет интерпретироваться как переменная с использованием значения переменной. Числа не нужно заключать в одинарные кавычки.
expressionПроизвольное выражение.
mask

Маска имени файла или папки, которая может включать в себя любые допустимые в имени файла символы и стандартные знаки подстановки, * и ?.

Можно использовать абсолютные пути к файлу или пути lib://.

conditionЛогическое выражение, имеющее значение True или False.
statementsЛюбая группа, состоящая из одного или нескольких операторов скрипта Qlik Sense.
filelist mask

Такой синтаксис создает разделенный запятыми список всех файлов в текущем каталоге, соответствующих маске имени файла.

dirlist mask

Такой синтаксис создает разделенный запятыми список всех папок в текущей папке, соответствующей маске имени папки.

fieldvaluelist maskЭтот синтаксис повторяется в значениях поля, которое уже загружено в Qlik Sense.
Примечание к предупреждениюМаски фильтров, в которых используются знаки подстановки (* и ?), не поддерживаются Qlik Коннекторы поставщиков веб-хранилищ и другими подключениями DataFiles.

Пример 1: Загрузка списка файлов

// LOAD the files 1.csv, 3.csv, 7.csv and xyz.csv for each a in 1,3,7,'xyz' LOAD * from file$(a).csv; next

Пример 2: Создание списка файлов на диске

В этом примере показана загрузка всех файлов в папке, относящихся к программе Qlik Sense.

sub DoDir (Root) for each Ext in 'qvw', 'qva', 'qvo', 'qvs', 'qvc', 'qvf', 'qvd' for each File in filelist (Root&'/*.' &Ext) LOAD '$(File)' as Name, FileSize( '$(File)' ) as Size, FileTime( '$(File)' ) as FileTime autogenerate 1; next File next Ext for each Dir in dirlist (Root&'/*' ) call DoDir (Dir) next Dir end sub call DoDir ('lib://DataFiles')

Пример 3: Повторяясь в значениях поля

Этот пример повторяется в списке загруженных значений элемента FIELD и создает новое поле NEWFIELD. Для каждого значения элемента FIELD необходимо создать две записи NEWFIELD.

load * inline [ FIELD one two three ]; FOR Each a in FieldValueList('FIELD') LOAD '$(a)' &'-'&RecNo() as NEWFIELD AutoGenerate 2; NEXT a

Полученная таблица выглядит следующим образом:

Example table
NEWFIELD
one-1
one-2
two-1
two-2
three-1
three-2

Подробнее

 

Помогла ли вам эта страница?

Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!